package handler

//
//import (
//	"fmt"
//	"log"
//	"os"
//	"path"
//	"time"
//)
//
//learn-package loggerMiddleware
//
//import (
//"fmt"
// "github.com/gin-gonic/gin"
//rotatelogs "github.com/lestrrat-go/file-rotatelogs"
//"github.com/rifflock/lfshook"
//log "github.com/sirupsen/logrus"
//"go-crawler-server/pkg/conf"
//"os"
//"path"
//"time"
//)
//
//func LoggerMiddleware() gin.HandlerFunc {
//
//	logFilePath := conf.AppConfig.AppLogFilePath
//	logFileName := conf.AppConfig.AppLogName
//	ginMode := conf.AppConfig.GinMode
//
//	// 实例化
//	logClient := log.New()
//
//	//设置日志级别
//	logClient.SetLevel(log.DebugLevel)
//
//	// 设置日志输出
//	if ginMode == "debug" {
//		// 日志消息输出可以是任意的io.writer类型
//		logClient.SetOutput(os.Stdout)
//	} else {
//		//日志文件
//		fileName := path.Join(logFilePath, logFileName)
//
//		//写入文件， 禁止 logrus 的输出 os.DevNull
//		src, err := os.OpenFile(fileName, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
//		if err != nil {
//			fmt.Println("日志文件写入失败：", err)
//		}
//		logClient.Out = src
//		// 日志分割
//		logWriter, _ := rotatelogs.New(
//			// 分割后的文件名称
//			fileName+".%Y-%m-%d-%H-%M.log",
//			rotatelogs.WithLinkName(fileName),         // 生成软链，指向最新日志文件
//			rotatelogs.WithMaxAge(7*24*time.Hour),     // 文件最大保存时间
//			rotatelogs.WithRotationTime(24*time.Hour), // 日志切割时间间隔
//		)
//		writeMap := lfshook.WriterMap{
//			log.InfoLevel:  logWriter,
//			log.FatalLevel: logWriter,
//			log.DebugLevel: logWriter,
//			log.WarnLevel:  logWriter,
//			log.ErrorLevel: logWriter,
//			log.PanicLevel: logWriter,
//		}
//
//		logClient.AddHook(lfshook.NewHook(writeMap, &log.JSONFormatter{
//			TimestampFormat: "2006-01-02 15:04:05",
//		}))
//	}
//
//	return func(context *gin.Context) {
//		//开始时间
//		startTime := time.Now()
//		//处理请求
//		context.Next()
//		//结束时间
//		endTime := time.Now()
//		// 执行时间
//		latencyTime := endTime.Sub(startTime)
//		//请求方式
//		reqMethod := context.Request.Method
//		//请求路由
//		reqUrl := context.Request.RequestURI
//		//状态码
//		statusCode := context.Writer.Status()
//		//请求ip
//		clientIP := context.ClientIP()
//
//		// 日志格式
//		logClient.WithFields(log.Fields{
//			"status_code":  statusCode,
//			"latency_time": latencyTime,
//			"client_ip":    clientIP,
//			"req_method":   reqMethod,
//			"req_uri":      reqUrl,
//		}).Info()
//	}
//}
